package cl.ccs.migracionbcmc.bean;


import cl.ccs.migracionbcmc.model.AuditoriaGlosaCantidad;
import cl.ccs.migracionbcmc.model.AuditoriaProtestos;
import cl.ccs.migracionbcmc.model.Client;
import cl.ccs.migracionbcmc.model.Contrato;
import cl.ccs.migracionbcmc.model.DatosPersona;
import cl.ccs.migracionbcmc.model.Emisor;
import cl.ccs.migracionbcmc.model.EmisorConsolidado;
import cl.ccs.migracionbcmc.model.Firmante;
import cl.ccs.migracionbcmc.model.IdDescription;
import cl.ccs.migracionbcmc.model.Ley;
import cl.ccs.migracionbcmc.model.Mensaje;
import cl.ccs.migracionbcmc.model.Motivo;
import cl.ccs.migracionbcmc.model.NumConfirmatorio;
import cl.ccs.migracionbcmc.model.PersonaBCMC;
import cl.ccs.migracionbcmc.model.PersonaBeneficiado;
import cl.ccs.migracionbcmc.model.PersonaBoletin;
import cl.ccs.migracionbcmc.model.PersonaCertificado;
import cl.ccs.migracionbcmc.model.PersonaCertificadoEmitido;
import cl.ccs.migracionbcmc.model.RangoBoletinesVig;
import cl.ccs.migracionbcmc.model.RutNombre;
import cl.ccs.migracionbcmc.model.Sucursal;
import cl.ccs.migracionbcmc.model.TipoDocumento;
import cl.ccs.migracionbcmc.model.TipoEmisor;
import cl.ccs.migracionbcmc.model.Usuario;
import cl.ccs.migracionbcmc.model.VerificaCertificado;

import java.util.Date;
import java.util.List;

import javax.ejb.Remote;


@Remote
public interface SessionBCMCEJB {
    
    //LOGIN USUARIO

    /**
     * @param codUsuario
     * @return
     * @throws Exception
     */
    public Usuario getInfoUsuario(String codUsuario) throws Exception;

    /**
     * @param codUsuario
     * @param oldPassw
     * @param newPassw
     * @return
     * @throws Exception
     */
    public Mensaje modificaPassword(String codUsuario, String oldPassw, String newPassw) throws Exception;
    
    //PROTESTOS

    /**
     * @param rut
     * @param login
     * @return
     * @throws Exception
     */
    public PersonaBCMC getProtestos(String rut, String login) throws Exception;
    
    //LISTA PUBLICO

    /**
     * @param rut
     * @param login
     * @return
     * @throws Exception
     */
    public PersonaBoletin getListaPublico(String rut, String login) throws Exception;
    
    //FIRMAS RUT

    /**
     * @param rut
     * @param apPaterno
     * @param apMaterno
     * @param nombres
     * @param isValid
     * @return
     * @throws Exception
     */
    public List<Firmante> getFirmasRut(String rut, String apPaterno, String apMaterno, String nombres, Boolean isValid) throws Exception;
    
    //FIRMAS EMISOR

    /**
     * @return
     * @throws Exception
     */
    public List<TipoEmisor> getCmbTipoEmisorFIR() throws Exception;

    /**
     * @param idTipoEmisor
     * @return
     * @throws Exception
     */
    public List<Emisor> getCmbEmisorFIR(String idTipoEmisor) throws Exception;

    /**
     * @param idTipoEmisor
     * @param codigoEmisor
     * @return
     * @throws Exception
     */
    public List<Sucursal> getCmbSucursalFIR(String idTipoEmisor, String codigoEmisor) throws Exception;

    /**
     * @param tipoEmisor
     * @param emisor
     * @param sucursal
     * @return
     * @throws Exception
     */
    public List<Firmante> getFirmasEmisor(String tipoEmisor, String emisor, Integer sucursal) throws Exception;
    
    //NUMERO CONFIRMATORIO

    /**
     * @return
     * @throws Exception
     */
    public List<TipoEmisor> getCmbTipoEmisorNC() throws Exception;

    /**
     * @param idTipoEmisor
     * @return
     * @throws Exception
     */
    public List<Emisor> getCmbEmisorNC(String idTipoEmisor) throws Exception;

    /**
     * @param idTipoEmisor
     * @param codigoEmisor
     * @return
     */
    public List<Sucursal> getCmbSucursalNC(String idTipoEmisor, String codigoEmisor);

    /**
     * @param corrVig
     * @return
     * @throws Exception
     */
    public NumConfirmatorio setCmbTipoEmiSucNumConf(Integer corrVig) throws Exception;

    /**
     * @param idTipoEmisor
     * @param codigoEmisor
     * @param idSucursal
     * @param nroConfirmatorio
     * @param nroFolio
     * @param usuario
     * @return
     * @throws Exception
     */
    public Boolean marcaNumeroConfirmatorio(String idTipoEmisor, String codigoEmisor, Integer idSucursal,
                                            Integer nroConfirmatorio, Integer nroFolio, String usuario) throws Exception;

    /**
     * @param idTipoEmisor
     * @param codigoEmisor
     * @param idSucursal
     * @param corrVig
     * @param nroConfirmatorio
     * @param nroFolio
     * @return
     * @throws Exception
     */
    public Mensaje buscaNumeroConfirmatorio(String idTipoEmisor, String codigoEmisor, Integer idSucursal,
                                           Integer corrVig, Integer nroConfirmatorio, Integer nroFolio) throws Exception;
    
    //BENEFICIADOS

    /**
     * @param rut
     * @param login
     * @return
     * @throws Exception
     */
    public PersonaBeneficiado getBeneficiados(String rut, String login) throws Exception;
    
    //CONTRATOS

    /**
     * @param rut
     * @return
     * @throws Exception
     */
    public List<Contrato> getContratos(String rut) throws Exception;

    /**
     * @param corrContrato
     * @param rut
     * @return
     * @throws Exception
     */
    public Contrato getDetalleContrato(Long corrContrato, String rut) throws Exception;

    /**
     * @param corrContrato
     * @param rutAfectado
     * @param usuario
     * @return
     * @throws Exception
     */
    public Boolean actualizaContrato(Long corrContrato, String rutAfectado, String usuario) throws Exception;
    
    //CONSULTA SITUACION LEY 20575

    /**
     * @param rut
     * @return
     * @throws Exception
     */
    public Ley consultaEstado(String rut) throws Exception;
    
    //CERTIFICADOS (READ)

    /**
     * @param rut
     * @return
     * @throws Exception
     */
    public DatosPersona consultaPersona(String rut) throws Exception;

    /**
     * @param rut
     * @param cCosto
     * @param login
     * @return
     * @throws Exception
     */
    public PersonaCertificado consultaCertificado(String rut, Integer cCosto, String login) throws Exception;

    /**
     * @param rut
     * @return
     * @throws Exception
     */
    public VerificaCertificado verificarCertificado(String rut) throws Exception;

    /**
     * @param rut
     * @param nombre
     * @param apPaterno
     * @param apMaterno
     * @throws Exception
     */
    public void addPersona(String rut, String nombre, String apPaterno, String apMaterno) throws Exception;

    /**
     * @param rutAfectado
     * @param corrNombre
     * @param rutSolicitante
     * @param cCosto
     * @param login
     * @return
     * @throws Exception
     */
    public PersonaCertificado consultaCertificadoPDF(String rutAfectado, Long corrNombre, String rutSolicitante, Integer cCosto,
                                                  String login) throws Exception;

    /**
     * @param rut
     * @return
     * @throws Exception
     */
    public PersonaCertificadoEmitido consultaCertificadosEmitidos(String rut) throws Exception;

    /**
     * @param fechaDesde
     * @param fechaHasta
     * @param isValid
     * @return
     * @throws Exception
     */
    public List<AuditoriaProtestos> getAuditoriaProtestos(Date fechaDesde, Date fechaHasta, Boolean isValid) throws Exception;

    /**
     * @param fechaDesde
     * @param fechahasta
     * @param codUsuario
     * @return
     * @throws Exception
     */
    public List<AuditoriaGlosaCantidad> getAuditoriaDetalle(Date fechaDesde, Date fechahasta, String codUsuario) throws Exception;

    /**
     * @param fechaDesde
     * @param fechaHasta
     * @param codUsuario
     * @param codConsulta
     * @return
     * @throws Exception
     */
    public List<RutNombre> getAuditoriaDetalleByCodConsulta(Date fechaDesde, Date fechaHasta, String codUsuario, Integer codConsulta) throws Exception;


    //VERIFICACIONES DE CARTERA

    /**
     * @return
     * @throws Exception
     */
    public List<EmisorConsolidado> getCmbEmisorConsol() throws Exception;

    /**
     * @return
     * @throws Exception
     */
    public List<TipoEmisor> getCmbTipoEmisorVerCar() throws Exception;

    /**
     * @param tipoEmisor
     * @return
     * @throws Exception
     */
    public List<Emisor> getCmbEmisoresAll(String tipoEmisor) throws Exception;

    /**
     * @return
     * @throws Exception
     */
    public List<Motivo> getCmbMotivo() throws Exception;

    /**
     * @return
     * @throws Exception
     */
    public RangoBoletinesVig obtieneBoletinesVig() throws Exception;

    /**
     * @return
     * @throws Exception
     */
    public List<TipoDocumento> getCmbTipoDoc() throws Exception;
    
   

    /**
     * @param codProceso
     * @param codUsuario
     * @param glosaTarea
     * @param corrEnvio
     * @return
     * @throws Exception
     */
    public Mensaje insertaTarea(int codProceso, String codUsuario,String glosaTarea,int corrEnvio) throws Exception;
    
    
    Mensaje inscripcionClientes(String rut, Date birthDate, String gender, Integer civilStatus, String names,
                            String firstLastName, String secondLastName, Integer educationalLevel,
                            String streetAddress, Integer commune, String city, String phone, String mobilePhone,
                            String activity, String email, String usuario, Integer ccosto);
    List<IdDescription> getCivilStatus();

    List<IdDescription> getEducationalLevel();

    List<IdDescription> getGender();

    List<IdDescription> getRegion();

    List<IdDescription> getCommune(int codRegion);

    List<IdDescription> getSecurityQuestion();
    
    List<IdDescription> getCmbEstadoClienteAll();
    
    Client buscaNombreCliente(String rut);
    
    Mensaje generaClave(Long nroCliente, Integer  ccosto, String usuarioModif);
    
    Client obtenerDatosCliente(Long nroCliente);
    
    List<Client> buscaClientes(String rut, Date fecDesde, Date fecHasta, Long nroCliente, Integer codEstado);
    
    Mensaje modificaDatosCliente(Long nroCliente, String rut, String names, String firstLastName, String secondLastName,
                            Date birthDate, String gender, Integer civilStatus, Integer educationalLevel,
                            String streetAddress, Integer commune, String city, String phone, String mobilePhone,
                            String activity, String email, String usuarioMod, String causalBlqAnul);
    Mensaje validaPrivilegios(String usuario, String privilegio);
    
    Mensaje bloqueaDesBlqCliente(Long nroCliente, String causalBlqAnul, String usuarioModif);
    
    Mensaje anulaCliente(Long nroCliente, String causalBlqAnul, String usuarioModif);
    
    Client recuperarClave(Long nroCliente, String usuarioModif);
    
    Mensaje validarCliente(Long nroCliente, String usuarioModif);
    
    List<Client> infClavesEntregadas(Date fecDesde, Date fecHasta, String usuario);
    
    List<Client> detalleTransDiarias(Date fecDesde, Date fecHasta, Integer ccosto);
    
    List<Client> resumenTransDiarias(Date fecDesde, Date fecHasta, Integer ccosto);
    
    List<IdDescription> getCmbCCostoAll();
}